/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
// 暴力求解
var subarraySum = function(nums, k) {
    let count = 0
    // 确定一个区间
    for (let i = 0; i < nums.length; i++) {
        let sum = 0
        for (let j = i; j < nums.length; j++) {
            sum += nums[j]
            if (sum == k) count++
        }
    }
    return count
};

// 利用前缀和进行求解
/*不用具体的求解出前缀数组 因为只用得到最后的和的个数
* */
var subarraySum = function(nums, k) {
    let map = {0: 1}
    // 前缀和
    let preSum = 0
    // 最终的数字
    let count = 0

    // 遍历
    for (let i = 0; i < nums.length; i++) {
        preSum += nums[i]

        // 遍历map  的key  如果存在key 为【当前前缀和 - k】
        // 说明这个之前出现的前缀和 满足当前前缀和  - 该前缀和 = k （差分出一个子数组）
        // 因此将它出现的次数 累加给count
        if (map[preSum - k]) {
            count += map[preSum - k]
        }
        // map 的键值对的设置
        if (map[preSum]) {
            map[preSum]++
        }else {
            map[preSum] = 1
        }
    }
    //return map
    // return preSum
    return count
}
let nums = [1,1,1]
let k = 2;
console.log(subarraySum(nums, k))
